package main

import (
	"fmt"
)

type Abser interface {
	Abs() *MyFloat
	Abs2() MyFloat
	Abs3() MyFloat
}

type MyFloat float64

func (f *MyFloat) Abs() *MyFloat {
	*f++
	// 地址
	return f
}

func (f MyFloat) Abs3() MyFloat {
	return MyFloat(3.2)
}

func (f *MyFloat) Abs2() MyFloat {
	*f++
	// 数值
	return *f
}

func main() {
	// 接口
	var f MyFloat = MyFloat(2)
	var a Abser = &f
	//	var a Abser = &MyFloat(2) // error
	//	var a Abser = f // error

	fmt.Println(a.Abs())
	fmt.Println(a.Abs2())
	//	fmt.Println(f)

	// 对象直接调用所以可以
	//	a := MyFloat(2)
	//	var f MyFloat = MyFloat(2)
	//	a := f // a := &f 也可以
	//	fmt.Println(a.Abs())
	//	fmt.Println(a.Abs2())
	//	fmt.Println(a)

	// 接口的查询
	if _, ok := a.(Abser); ok {
		fmt.Println("OK")
	} else {
		fmt.Println("error")
	}

}
